Depth cameras are used in a multitude of applications to capture three-dimensional information using, for example, multiple lenses or infrared sensors. The particular applications of depth cameras range from gesture-based interfaces (e.g., on a video game system) to robot navigation. The depth channel or stream output by the depth camera indicates the distance of an object captured in the scene relative to the camera. However, there are numerous cases in which a depth camera is unable to determine the precise depth measurements of certain points within the scene. This may be due to a variety of factors including, for example, occlusions, infrared frequency absorption of an object in the scene, signal noise, and/or distance from the depth camera. These common scenarios result in depth images (i.e., a depth channel or depth stream) having holes and poorly defined object boundaries. Busy environments further amplify the potential number and size of depth holes in depth image.
Although in some applications the depth holes are generally not a concern (e.g., in video games), in other applications an accurate depth image is critical to functionality (e.g., robot navigation). Accordingly, numerous algorithms have been developed in an attempt to remedy such deficiencies of depth cameras. For example, various signal and image processing filters have been leveraged to smooth out noise and fill depth holes. Due to the large number of images processed in a video stream, a balance must be struck between the accuracy and efficiency of the corrected depth camera image.